#!/usr/bin/env bun

import PptxGenJs from 'pptxgenjs';

async function testCharts() {
  console.log('📊 PPT图表功能测试');
  console.log('='.repeat(40));
  
  try {
    const ppt = new PptxGenJs();
    ppt.layout = 'LAYOUT_WIDE';
    ppt.author = '张三';
    ppt.title = '图表功能演示';
    
    // 1. 柱状图 - 年度数据对比
    console.log('测试1: 柱状图 - 年度数据对比');
    const slide1 = ppt.addSlide();
    slide1.background = { color: '2c3e50' };
    
    slide1.addText('年度数据对比 - 柱状图', {
      x: 1, y: 0.3, w: 8, h: 0.8,
      fontSize: 24, color: 'ffffff', bold: true,
      align: 'center'
    });
    
    const barData = [
      { name: '代码提交', labels: ['Q1', 'Q2', 'Q3', 'Q4'], values: [250, 320, 480, 650] },
      { name: 'Bug修复', labels: ['Q1', 'Q2', 'Q3', 'Q4'], values: [45, 65, 78, 92] }
    ];
    
    slide1.addChart(ppt.ChartType.bar, barData, {
      x: 1, y: 1.5, w: 8, h: 4,
      title: 'Q1-Q4季度数据对比',
      titleColor: '3498db',
      titleFontSize: 16,
      showTitle: true,
      showLegend: true,
      legendPos: 'r',
      chartArea: { fill: { color: '34495e' } },
      plotArea: { fill: { color: '2c3e50' } },
      catAxisLabelColor: 'ffffff',
      valAxisLabelColor: 'ffffff',
      dataLabelColor: 'ffffff'
    });
    
    // 2. 饼图 - 技术栈分布
    console.log('测试2: 饼图 - 技术栈分布');
    const slide2 = ppt.addSlide();
    slide2.background = { color: '2c3e50' };
    
    slide2.addText('技术栈使用分布 - 饼图', {
      x: 1, y: 0.3, w: 8, h: 0.8,
      fontSize: 24, color: 'ffffff', bold: true,
      align: 'center'
    });
    
    const pieData = [
      { name: 'JavaScript', labels: ['Frontend'], values: [35] },
      { name: 'Python', labels: ['Backend'], values: [28] },
      { name: 'TypeScript', labels: ['Fullstack'], values: [22] },
      { name: 'Go', labels: ['Microservices'], values: [15] }
    ];
    
    slide2.addChart(ppt.ChartType.pie, pieData, {
      x: 1, y: 1.5, w: 8, h: 4,
      title: '项目技术栈分布占比',
      titleColor: '3498db',
      titleFontSize: 16,
      showTitle: true,
      showLegend: true,
      legendPos: 'r',
      chartArea: { fill: { color: '34495e' } },
      plotArea: { fill: { color: '2c3e50' } },
      dataLabelColor: 'ffffff',
      showValue: true,
      showPercent: true
    });
    
    // 3. 折线图 - 性能趋势
    console.log('测试3: 折线图 - 性能趋势');
    const slide3 = ppt.addSlide();
    slide3.background = { color: '2c3e50' };
    
    slide3.addText('系统性能趋势 - 折线图', {
      x: 1, y: 0.3, w: 8, h: 0.8,
      fontSize: 24, color: 'ffffff', bold: true,
      align: 'center'
    });
    
    const lineData = [
      { 
        name: '响应时间(ms)', 
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'], 
        values: [120, 95, 78, 65, 58, 45] 
      },
      { 
        name: 'CPU使用率(%)', 
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'], 
        values: [78, 65, 58, 52, 48, 42] 
      }
    ];
    
    slide3.addChart(ppt.ChartType.line, lineData, {
      x: 1, y: 1.5, w: 8, h: 4,
      title: '系统性能月度趋势',
      titleColor: '3498db',
      titleFontSize: 16,
      showTitle: true,
      showLegend: true,
      legendPos: 'r',
      chartArea: { fill: { color: '34495e' } },
      plotArea: { fill: { color: '2c3e50' } },
      catAxisLabelColor: 'ffffff',
      valAxisLabelColor: 'ffffff',
      lineSize: 3
    });
    
    // 4. 面积图 - 用户增长
    console.log('测试4: 面积图 - 用户增长');
    const slide4 = ppt.addSlide();
    slide4.background = { color: '2c3e50' };
    
    slide4.addText('用户增长趋势 - 面积图', {
      x: 1, y: 0.3, w: 8, h: 0.8,
      fontSize: 24, color: 'ffffff', bold: true,
      align: 'center'
    });
    
    const areaData = [
      { 
        name: '活跃用户', 
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'], 
        values: [1200, 1850, 2600, 3200, 4100, 5300] 
      },
      { 
        name: '新增用户', 
        labels: ['1月', '2月', '3月', '4月', '5月', '6月'], 
        values: [650, 750, 900, 1100, 1350, 1650] 
      }
    ];
    
    slide4.addChart(ppt.ChartType.area, areaData, {
      x: 1, y: 1.5, w: 8, h: 4,
      title: '用户增长月度趋势',
      titleColor: '3498db',
      titleFontSize: 16,
      showTitle: true,
      showLegend: true,
      legendPos: 'r',
      chartArea: { fill: { color: '34495e' } },
      plotArea: { fill: { color: '2c3e50' } },
      catAxisLabelColor: 'ffffff',
      valAxisLabelColor: 'ffffff'
    });
    
    // 5. 散点图 - 性能与资源关系
    console.log('测试5: 散点图 - 性能与资源关系');
    const slide5 = ppt.addSlide();
    slide5.background = { color: '2c3e50' };
    
    slide5.addText('性能与资源关系 - 散点图', {
      x: 1, y: 0.3, w: 8, h: 0.8,
      fontSize: 24, color: 'ffffff', bold: true,
      align: 'center'
    });
    
    // 散点图数据格式稍有不同
    const scatterData = [
      { 
        name: '服务器A', 
        values: [[10, 80], [20, 65], [30, 55], [40, 45], [50, 40]]
      },
      { 
        name: '服务器B', 
        values: [[15, 75], [25, 60], [35, 50], [45, 42], [55, 38]]
      }
    ];
    
    slide5.addChart(ppt.ChartType.scatter, scatterData, {
      x: 1, y: 1.5, w: 8, h: 4,
      title: 'CPU使用率 vs 响应时间',
      titleColor: '3498db',
      titleFontSize: 16,
      showTitle: true,
      showLegend: true,
      legendPos: 'r',
      chartArea: { fill: { color: '34495e' } },
      plotArea: { fill: { color: '2c3e50' } },
      catAxisTitle: 'CPU使用率(%)',
      valAxisTitle: '响应时间(ms)',
      catAxisTitleColor: 'ffffff',
      valAxisTitleColor: 'ffffff',
      catAxisLabelColor: 'ffffff',
      valAxisLabelColor: 'ffffff'
    });
    
    const outputPath = '/Users/ahata/Downloads/charts-test.pptx';
    console.log(`💾 保存到: ${outputPath}`);
    
    await new Promise((resolve, reject) => {
      ppt.writeFile({ fileName: outputPath })
        .then(() => {
          console.log('\n✅ 图表测试完成！');
          console.log('\n📊 包含图表类型:');
          console.log('   1. 柱状图 - 年度数据对比');
          console.log('   2. 饼图 - 技术栈分布');
          console.log('   3. 折线图 - 性能趋势');
          console.log('   4. 面积图 - 用户增长');
          console.log('   5. 散点图 - 性能与资源关系');
          
          console.log('\n🎨 图表特色:');
          console.log('   ✨ 深色科技风背景');
          console.log('   📊 白色文字和标签');
          console.log('   🎯 专业的图表配色');
          console.log('   📐 适配16:9宽屏格式');
          
          resolve(void 0);
        })
        .catch(reject);
    });
    
  } catch (error) {
    console.error('❌ 图表测试失败:', error);
  }
}

if (import.meta.main) {
  testCharts();
}
